package tp.tecnicasdisenio.util;

import java.util.Date;

import tp.tecnicasdisenio.model.entity.Alumno;
import tp.tecnicasdisenio.model.entity.Consulta;
import tp.tecnicasdisenio.model.entity.ConsultaEstado;
import tp.tecnicasdisenio.model.entity.ConsultaTipo;
import tp.tecnicasdisenio.model.entity.Cuatrimestre;
import tp.tecnicasdisenio.model.entity.EntregaTp;
import tp.tecnicasdisenio.model.entity.EntregaTp.ClaveEntregaTp;
import tp.tecnicasdisenio.model.entity.Grupo;
import tp.tecnicasdisenio.model.entity.Grupo.ClaveGrupo;
import tp.tecnicasdisenio.model.entity.Materia;
import tp.tecnicasdisenio.model.entity.MensajeSMTPMIME;
import tp.tecnicasdisenio.model.entity.Ticket;
import tp.tecnicasdisenio.model.entity.TrabajoPractico;
import tp.tecnicasdisenio.model.entity.TrabajoPractico.ClaveTrabajoPractivo;

public class EntityUtil {

  public static ClaveTrabajoPractivo crearClaveTPCuatrimestreActual(
      Materia materia, String nroTp) {
    ClaveTrabajoPractivo claveTrabajoPractivo = new ClaveTrabajoPractivo();
    claveTrabajoPractivo.setCuatrimestre(FechaUtil.getCuatrimestreActual());
    claveTrabajoPractivo.setMateria(materia);
    claveTrabajoPractivo.setNumeroTp(nroTp);
    return claveTrabajoPractivo;
  }

  public static Materia crearMateria(String codMateria, String nombre,
      String email, String password, String host) {
    Materia materia = new Materia();
    materia.setCodigo(codMateria);
    materia.setNombre(nombre);
    materia.setEmail(email);
    materia.setPassword(password);
    materia.setHost(host);
    materia.setSmtpHost("smtp_host");
    materia.setSmtpPort("smtp_port");
    return materia;
  }

  public static Alumno crearAlumno(String padron, String nombre,
      String apellido, String email) {
    Alumno alumno = new Alumno();
    alumno.setPadron(padron);
    alumno.setNombre(nombre);
    alumno.setApellido(apellido);
    alumno.setEmail(email);
    return alumno;
  }

  public static MensajeSMTPMIME crearMensaje(String mime, boolean procesado,
      boolean aplicoARegla) {
    MensajeSMTPMIME mensajeSMTPMIME = new MensajeSMTPMIME();
    mensajeSMTPMIME.setMime(mime);
    mensajeSMTPMIME.setProcesado(procesado);
    mensajeSMTPMIME.setAplicoARegla(aplicoARegla);
    return mensajeSMTPMIME;
  }

  public static Cuatrimestre
      crearCuatrimestre(String cuatrimestre, Integer anio) {
    Cuatrimestre cuat = new Cuatrimestre();
    cuat.setAnio(anio);
    cuat.setCuatrimestre(cuatrimestre);
    return cuat;
  }

  public static TrabajoPractico crearTrabajoPractico(Materia materia,
      String nroTp, Cuatrimestre cuatrimestre) {
    TrabajoPractico tp = new TrabajoPractico();
    ClaveTrabajoPractivo clave = new ClaveTrabajoPractivo();
    clave.setCuatrimestre(cuatrimestre);
    clave.setMateria(materia);
    clave.setNumeroTp(nroTp);
    tp.setClaveTrabajoPractivo(clave);
    return tp;
  }

  public static Consulta crearConsulta(String padron, String tema,
      ConsultaTipo tipo, ConsultaEstado estado) {
    Consulta consulta = new Consulta();
    consulta.setPadron(padron);
    consulta.setTema(tema);
    consulta.setTipo(tipo);
    consulta.setEstado(estado);
    return consulta;
  }

  public static ClaveGrupo crearClaveGrupo(Materia materia, Cuatrimestre cuat,
      Integer nroGrupo) {
    ClaveGrupo claveGrupo = new ClaveGrupo();
    claveGrupo.setMateria(materia);
    claveGrupo.setCuatrimestre(cuat);
    claveGrupo.setNumero(nroGrupo);
    return claveGrupo;
  }

  public static Grupo crearGrupo(Materia materia, Cuatrimestre cuat,
      Integer nroGrupo) {
    ClaveGrupo clave = EntityUtil.crearClaveGrupo(materia, cuat, nroGrupo);
    Grupo grupo = new Grupo();
    grupo.setClaveGrupo(clave);
    return grupo;
  }

  public static Ticket crearTicket(String tema, String padron, Integer mimeId,
      long fechaEnTimeMillis) {
    Ticket ticket = new Ticket();
    ticket.setTema(tema);
    ticket.setPadron(padron);
    ticket.setMimeId(mimeId);
    ticket.setFecha((new Date(fechaEnTimeMillis)));
    return ticket;
  }

  public static ClaveEntregaTp crearClaveEntregaTp(Grupo grupo, Integer nroTp,
      Date fecha) {
    ClaveEntregaTp clave = new ClaveEntregaTp();
    clave.setGrupo(grupo);
    clave.setNroTp(nroTp);
    clave.setFecha(fecha);

    return clave;
  }

  public static EntregaTp crearEntregaTp(Grupo grupo, Integer nroTp,
      Date fecha, TrabajoPractico tp) {
    ClaveEntregaTp clave = EntityUtil.crearClaveEntregaTp(grupo, nroTp, fecha);

    EntregaTp entrega = new EntregaTp();
    entrega.setClaveEntrega(clave);
    entrega.setTrabajoPractico(tp);

    return entrega;
  }
}
